/*
 * ==================================================
 * 项目开发者：JerryStark
 * 开发者Email：4771007@qq.com
 * 开发者QQ:4771007
 * 开发范围：web，wap，android,ios,osx or win or linux 应用
 * ==================================================
 */
package Conter;

import RTPower.RTFile;
import RTPower.SqlInfo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import java.io.File;

/**
 * 程序配信息管理类
 * <br>除了读取配置文件,还包括全局使用的变量
 *
 * @author jerry
 */
public class Config {

    /**
     * 主程序配置文件使用的JsonObject
     */
    public static JsonObject MainConfig = new JsonObject();

    /**
     * mysql配置信息
     */
    public static JsonObject MysqlConfig = new JsonObject();
    /**
     * 整个游戏的抓取开关
     * <br>配置为false则所有的抓取全部关闭
     * <br>动态变动和执行
     */
    public static boolean AllGameGetStatus = true;
    /**
     * 整个彩票的所有游戏配置信息JsonObject
     * <br>读取配置文件动态获取
     */
    public static JsonObject LotteryConfig = new JsonObject();

    /**
     * 配置文件的目录
     */
    private static final String ConfPath;

    /**
     * 初始化检查配置目录存在否,以及主程序配置文件存在不
     */
    static {
        System.out.println("配置:文件初始检查");
        ConfPath = "config";
        //检查配置目录以及文件是否存在
        ScanPath();

    }

    /**
     * 彩票类游戏文件名的开头标示字符
     */
    private static String lottery_fast_name;

    /**
     * 球类游戏文件名的开头标示字符
     */
    private static String ball_falst_name;

    /**
     * 初始化读取一次配置
     */
    public static void Format() {
        System.out.println("配置:刷新读取配置数据");
        //读取配置到hash
        MainConfig = (JsonObject) RTFile.ReadJsonFileToOtherTypeObject(ConfPath + "/MainConfig.txt", JsonObject.class);
        MysqlConfig = MainConfig.getAsJsonObject("mysql");
        //配置mysql数据库信息
        ConfMysqlInfo();
        //检查目录中有没有指定配置开头的配置文件,有的话全部加载
        ScanLoadgameConfig();
        System.out.println("配置:" + MainConfig);
    }

    /**
     * 检查配置目录是否存在
     *
     * @return
     */
    private static void ScanPath() {
        //检查目录,不存在自动创建
        RTFile.CreateDirectory(ConfPath);
        //检查文件存在不,不存在自动创建
        RTFile.Create(ConfPath + "/MainConfig.txt");
        //读取配置文件,空的话则自动加入
        String main_conf_string = RTFile.Read(ConfPath + "/MainConfig.txt");
        //读出的是空,则写出新的
        if (main_conf_string.equals("")) {
            MainConfig.addProperty("ServerPort", 8080);
            MainConfig.addProperty("LotteryFileFastName", "lottery_");
            MainConfig.addProperty("BallFileFastName", "ball_");
            REMainConf();
        }
    }

    /**
     * 把全局变量json重写进文件
     */
    public static void REMainConf() {

        Gson json = new GsonBuilder().setPrettyPrinting().create();
        String new_json = json.toJson(MainConfig);
        RTFile.Write(ConfPath + "/MainConfig.txt", new_json, false);
    }

    /**
     * 检查并加载所有游戏的配置文件
     * <br>每个游戏一个配置文件,按配置文件设置的开头特征字符开区分
     * <br>目录里有多少加载多少
     * <br>存入对应的全局变量json里
     */
    private static void ScanLoadgameConfig() {

        //得到配置的特征符号
        lottery_fast_name = MainConfig.get("LotteryFileFastName").getAsString();
        ball_falst_name = MainConfig.get("BallFileFastName").getAsString();

        //限度去目录下的所有文件,放入数组
        File dir = new File(ConfPath);
        File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组

        if (files != null) {
            for (int f = 0; f < files.length; f++) {

                //检查文件是否是标准格式的配置文件,是就加载
                ScanOneGameConf(files[f].getName());
            }
        }

    }

    /**
     * 扫描一个文件是否是标准的配置文件,是就加载
     *
     * @param conf_file_name
     */
    private static void ScanOneGameConf(String conf_file_name) {

        //检查文件名,是彩票的配置
        if (conf_file_name.contains(lottery_fast_name)) {
            //加载彩票配置
            LoadLottery(conf_file_name);
        }
        //检查是不是球类的配置
        if (conf_file_name.contains(lottery_fast_name)) {

        }
    }

    /**
     * 处理加载彩票配置文件
     *
     * @param conf_file_name
     */
    private static void LoadLottery(String conf_file_name) {
        //获取配置文件内容
//        String conf_string = RTFile.Read(ConfPath+"/"+conf_file_name);
//        //把内容转json
//        Gson json = new Gson();
//        JsonObject file_json = json.fromJson(conf_string, JsonObject.class);
//        System.err.println(file_json);
        JsonObject file_json = (JsonObject) RTFile.ReadJsonFileToOtherTypeObject(ConfPath + "/" + conf_file_name, JsonObject.class);
        if (file_json.entrySet().size() > 0) {
            //检查有没有tag标签
            if (file_json.has("tag")) {
                LotteryConfig.add(file_json.get("tag").toString(), file_json);
            }

        }
    }

    /**
     * 配置一次mysql的链接信息
     */
    private static void ConfMysqlInfo() {
        SqlInfo.mysql_host = MysqlConfig.get("server_ip").getAsString();
        SqlInfo.mysql_port = MysqlConfig.get("server_port").getAsString();
        SqlInfo.mysql_dataname = MysqlConfig.get("data_name").getAsString();
        SqlInfo.mysql_user = MysqlConfig.get("username").getAsString();
        SqlInfo.mysql_password = MysqlConfig.get("password").getAsString();
    }
}
